昨天把專案建起來了,今天要來把專案推到雲端。
zeabur 是個新興的雲端部署解決方案,特色是只須提供專案原始碼,便可以自動將服務打包部署到雲端。
請到官網註冊帳號 https://zeabur.com/zh-TW
新增專案 -> 新增服務 -> 選擇 github 專案
然後就會自動幫你部署第一次了(太快了來不及截圖XD)
部署完成後可以到 網域 取得公開 url
這時直接連線上去會發現,由於 production 環境預設沒設定任何 host,因此會連線不上。
# config/applications.rb
config.hosts << ".zeabur.app"
# config/environments/production.rb
config.log_level = :debug # 為了從 log 得到更多訊息
改好後 commit、push
可以看到 zeabur 會自動開始新的部署
重新訪問網站發現,我們還需要一個資料庫服務,zeabur 上面增加資料庫也很簡單
選擇建立服務 -> Marketplace -> PostgreSQL
TBD...
--- updated at 09/28 01:50
編輯 database.yml 讓他能找到雲端上的資料庫
production:
<<: *default
- database: ironman2023_hanabi_production
- username: ironman2023_hanabi
- password: <%= ENV["IRONMAN2023_HANABI_DATABASE_PASSWORD"] %>
+ database: <%= ENV["IRONMAN2023_HANABI_DATABASE"] %>
+ host: <%= ENV["POSTGRES_HOST"] %>
+ username: <%= ENV["POSTGRES_USERNAME"] %>
+ password: <%= ENV["POSTGRES_PASSWORD"] %>
+ port: <%= ENV["POSTGRES_PORT"] %>
並在 環境變數 中設定 IRONMAN2023_HANABI_DATABASE
的值
檢查 Runtime Logs 會發現目前是跑 development 的環境
可以新增 RAILS_ENV=production
環境變數去指定到 production 環境
再次 deploy
遇到第一次 build fail
查看 Build Logs
找到失敗原因
ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `bin/rails credentials:edit`
一樣設定環境變數 SECRET_KEY_BASE
= config/master.key
的值
再次 deploy
會看到 production 下預設的 error page
此時 Logs 也不打算告訴我們更多訊息
猜測應該是 db 還沒建立 / Migrate
為了方便操作,我們可以新增 dotenv 這個套件,來輕鬆指定環境變數,並連線到遠端資料庫更新。
bundle add dotenv-rails
在 專案根目錄下建立 .env 檔案,值可從 zeabur/postgresql 上查看
IRONMAN2023_HANABI_DATABASE=database
POSTGRES_HOST=host
POSTGRES_USERNAME=username
POSTGRES_PASSWORD=password
POSTGRES_PORT=port
然後執行
RAILS_ENV=production rails db:prepare
// or create then migrate
再次查看網頁
總算可以成功進入了
看到 config/environments/production.rb
# Disable serving static files from the `/public` folder by default since
# Apache or NGINX already handles this.
config.public_file_server.enabled = ENV["RAILS_SERVE_STATIC_FILES"].present?
由於還沒有配置靜態網頁伺服器,因此我們讓 rails 來提供靜態檔案,一樣透過新增環境變數來切換
並且按下 redeploy 讓他產生 assets
成果
這些步驟當初已經先做過一次驗證可行性,想不到打成文字說明會花那麼久時間
明天看情況決定 1. 串 action cable 或是 2. 進入遊戲開發 XD